// main.cpp
#include "psram_manager.h"

void setup() {
  Serial.begin(115200);

  // 初始化 PSRAM
  initMemory();

  // 测试使用 PSRAM 分配
  int *psram_array = Malloc(int, (60 * 1024) / sizeof(int));  // 大于 50KB，应使用 PSRAM
  if (psram_array) {
    Serial.println("PSRAM allocation successful.");
  } else {
    Serial.println("PSRAM allocation failed.");
  }

  // 测试使用 SRAM 分配
  int *sram_array = Malloc(int, (40 * 1024) / sizeof(int));  // 小于 50KB，应使用 SRAM
  if (sram_array) {
    Serial.println("SRAM allocation successful.");
  } else {
    Serial.println("SRAM allocation failed.");
  }

  // 打印内存使用情况
  Serial.print("Used SRAM: ");
  Serial.print(getUsedSramMemory() / 1024);
  Serial.println(" KB");
  Serial.print("Used PSRAM: ");
  Serial.print(getUsedPsramMemory() / 1024);
  Serial.println(" KB");

  // 测试内存分配失败的情况（尝试分配超出可用内存的空间）
  size_t huge_size = (2 * 1024 + 500) * 1024;  // 假设超出可用 PSRAM
  char *huge_array = Malloc(char, huge_size);
  if (huge_array) {
    Serial.println("Huge allocation successful.");
  } else {
    Serial.println("Huge allocation failed as expected.");
  }
  int* index = Malloc(int, 100);
  String indexAddress = String((uint32_t)index, HEX);  // 将地址转换为十六进制字符串
  LOG("Index allocated at: ", indexAddress.c_str(), "\n");  // 打印分配的 index 指针地址
  Free(index);  // 释放内存
  LOG("Index freed.\n");

  // 清理内存
  Free(psram_array);
  Free(sram_array);
  Free(huge_array);
  ClearMemory();
}

void loop() {
  // 无需实现
}
